package com.springboot.controller;


import com.springboot.annotation.RequireRole;
import com.springboot.common.Result;
import com.springboot.entity.Users;
import com.springboot.service.IUsersService;
import com.springboot.vo.UserLoginVO;
import jakarta.annotation.Resource;
import org.springframework.web.bind.annotation.*;

/**
 * 用户 前端控制器
 *
 * @author zjb
 * @since 2025-09-09 14:15
 */
@RestController
@RequestMapping("/users")
public class UsersController {
    @Resource
    private IUsersService iUsersService;

    /**
     * 用户登录接口
     *
     * @param userLoginVO 登录信息，包括手机号和密码
     * @return 登录结果，包含用户信息和访问令牌
     */
    @PostMapping("/login")
    public Result login(@RequestBody UserLoginVO userLoginVO){
        return iUsersService.login(userLoginVO);
    }

    /**
     * 用户注册接口
     *
     * @param users 用户注册信息
     * @return 注册结果
     */
    @PostMapping("/register")
    public Result register(@RequestBody Users users){
        return iUsersService.register(users);
    }

    /**
     * 查询所有用户信息（分页）
     *
     * @param pageNum  页码
     * @param pageSize 每页显示数量
     * @param gender   性别筛选条件（可选）
     * @param search   搜索关键字（可选）
     * @return 用户分页列表数据
     */
    @RequireRole("admin")
    @GetMapping("/list")
    public Result searchAll(@RequestParam Integer pageNum,@RequestParam Integer pageSize,
                            @RequestParam(required = false) String gender,@RequestParam(required = false) String search){
        return iUsersService.searchUsersAll(pageNum,pageSize,gender,search);
    }

    /**
     * 更新用户信息
     *
     * @param userId 用户ID
     * @param users  用户更新信息
     * @return 更新结果
     */
    @PutMapping("/{userId}")
    public Result updateUserInfo(@PathVariable Integer userId,@RequestBody Users users){
        return iUsersService.updateUserInfo(userId,users);
    }

    /**
     * 修改用户状态（启用/禁用）
     *
     * @param id     用户ID
     * @param status 用户状态（1-正常，0-禁用）
     * @return 修改结果
     */
    @RequireRole("admin")
    @PutMapping("/change-status")
    public Result changeUserStatus(@RequestParam Integer id,@RequestParam Integer status){
        return iUsersService.changeUserStatus(id,status);
    }

}